﻿using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;

namespace Operacional
{
    public partial class frmBobines : Form
    {
        #region Declarações

        private char _turno;
        private string _linha, _numeroordem;
        private string[] _ordem;

        private DataView _dvProducao, _dvDesperdicios;
        private readonly DataView _dvLinhasTarefas = frmLinhas.dvLinhasTarefas;

        private readonly SqlDataAdapter _daProducao = new SqlDataAdapter("Select * from Producao", frmEntrada.conn);
        private SqlCommandBuilder _builder;

        private decimal _kilosUnidades;
        private DateTime _time;

        #endregion

        public frmBobines()
        {
            InitializeComponent();
        }

        private void frmBobines_Load(object sender, EventArgs e)
        {
            Dock = DockStyle.Fill;
            frmEntrada.tmrLogin.Enabled = false;
            _builder = new SqlCommandBuilder(_daProducao);

            calculaTurno();
            preenche();
        }

        private void calculaTurno()
        {
            const string turno1 = "DDCCCBBBBAAACCCCDDDAAAABBBDD";
            const string turno2 = "AAADDDDDDDBBBBBBBCCCCCCCAAAA";
            const string turno3 = "CBBBAAAACCCDDDDAAABBBBDDDCCC";

            double difDias = Math.Truncate(DateTime.Now.Subtract(Convert.ToDateTime("24-12-2006")).TotalDays);
            int y = Convert.ToInt32(difDias - Math.Truncate(Math.Truncate(difDias / 28) * 28));

            if (y == 0) y = 27;

            _time = DateTime.Parse(DateTime.Now.ToString("HH:mm"));
            if (_time >= DateTime.Parse("00:00") && _time <= DateTime.Parse("08:00"))
                _turno = turno1[y];
            if (_time >= DateTime.Parse("08:01") && _time <= DateTime.Parse("16:00"))
                _turno = turno2[y];
            if (_time >= DateTime.Parse("16:01") && _time <= DateTime.Parse("23:59"))
                _turno = turno3[y];

            lblTurno.Text = _turno.ToString();
        }

        private void preenche()
        {
            _linha = frmLinhas.numLinha;

            _dvLinhasTarefas.RowFilter = string.Format("[Estado] Like 'Em Producao' and [Linha]='{0}'", _linha);
            _numeroordem = _dvLinhasTarefas[_dvLinhasTarefas.Count - 1]["Ordem"].ToString();
            _dvLinhasTarefas.RowFilter = string.Format("[Estado] Like 'Em Producao' and [Linha]='{0}' and [Ordem] = '{1}'", _linha, _numeroordem);
            
            if (_dvLinhasTarefas.Count > 0)
            {
                _ordem = _dvLinhasTarefas[_dvLinhasTarefas.Count - 1]["Observacoes"].ToString().Replace('"', ' ').Split('#');

                #region "Fill with data of Ordem"

                lblOrdem.Text = _numeroordem;
                lblLote.Text = _ordem[1];
                lblKilos.Text = _ordem[6];
                lblUnidades.Text = _ordem[7];
                lblEncomenda.Text = _ordem[8];
                lblPosEncomenda.Text = _ordem[9];

                #endregion

                if (decimal.Parse(_ordem[7]) != 0)
                    _kilosUnidades = decimal.Parse(_ordem[6]) / decimal.Parse(_ordem[7]);

                if (frmEntrada.dsFilkemp.Tables["dtProducao"] != null) frmEntrada.dsFilkemp.Tables["dtProducao"].Clear();
                _daProducao.Fill(frmEntrada.dsFilkemp, "dtProducao");

                _dvProducao = new DataView(frmEntrada.dsFilkemp.Tables["dtProducao"]) { RowFilter = String.Format("Linha = {0} and Ordem = {1}", _linha, lblOrdem.Text.Trim()) };

                gridContagens.DataSource = _dvProducao;
                lblVirada.Text = (gridContagens.Rows.Count + 1).ToString();

                #region "GridContagens"
                gridContagens.Columns[0].Visible = false;
                gridContagens.Columns["Linha"].Visible = false;
                gridContagens.Columns["Obs"].Visible = false;
                gridContagens.Columns["Ordem"].Visible = false;
                gridContagens.Columns["Turno"].Visible = false;
                gridContagens.Columns["Virada"].Visible = false;
                gridContagens.Columns["Data"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                gridContagens.Columns["Hora"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                gridContagens.Columns["Kgs NC"].AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader;
                gridContagens.Columns["Unids"].AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader;
                gridContagens.Columns["Operador"].AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader;
                gridContagens.Columns["Operador"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
                #endregion

                btnGravar.Enabled = true;
            }

            if (gridContagens.RowCount <= 0) return;

            double kilos = 0;
            double unidades = 0;
            foreach (DataGridViewRow drow in gridContagens.Rows)
            {
                if (!string.IsNullOrEmpty(drow.Cells["Kgs"].Value.ToString()))
                    kilos += double.Parse(drow.Cells["Kgs"].Value.ToString());

                if (!string.IsNullOrEmpty(drow.Cells["Unids"].Value.ToString()))
                    unidades += double.Parse(drow.Cells["Unids"].Value.ToString());
            }

            lblKgsProd.Text = kilos.ToString();
            lblKgsProduzir.Text = (double.Parse(lblKilos.Text) - kilos).ToString();

            lblUnProd.Text = unidades.ToString();
            lblUniProduzir.Text = (double.Parse(lblUnidades.Text) - unidades).ToString();
        }

        private void btnGravar_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Tem a certeza?", "Deseja Gravar?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                DataRow dRow = frmEntrada.dsFilkemp.Tables["dtProducao"].NewRow();

                #region "Campos"

                dRow["Linha"] = frmLinhas.numLinha;
                dRow["Data"] = DateTime.Now.ToString("yyyy/MM/dd");
                dRow["Hora"] = DateTime.Now.ToString("HH:mm");
                dRow["Virada"] = lblVirada.Text;
                dRow["Turno"] = lblTurno.Text.Trim();
                dRow["Ordem"] = lblOrdem.Text;
                dRow["Kgs"] = txtKilosOk.Text;
                dRow["Unids"] = txtUniOk.Text;
                dRow["Kgs NC"] = txtKilosNOk.Text;
                dRow["Unid NC"] = txtUniNOk.Text;
                dRow["Obs"] = "\"" + txtObs.Text + "\"";
                dRow["Operador"] = frmEntrada.dvUsers[0][0];

                #endregion

                frmEntrada.dsFilkemp.Tables["dtProducao"].Rows.Add(dRow);
                _daProducao.InsertCommand = _builder.GetInsertCommand();
                _daProducao.Update(frmEntrada.dsFilkemp.Tables["dtProducao"]);

                txtKilosOk.Text = "";
                txtKilosNOk.Text = "";
                txtUniOk.Text = "";
                txtUniNOk.Text = "";
                txtObs.Text = "";

                preenche();
            }
        }

        #region Validation TextBoxs

        private void txtUniOk_TextChanged(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtUniOk.Text.Trim()))
                txtKilosOk.Text = (Convert.ToDouble(_kilosUnidades) * Convert.ToDouble(txtUniOk.Text)).ToString("0.000");
        }

        private void txtUniNOk_TextChanged(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtUniNOk.Text.Trim()))
                txtKilosNOk.Text = (Convert.ToDouble(_kilosUnidades) * Convert.ToDouble(txtUniNOk.Text)).ToString("0.000");
        }

        private void txtUniOk_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsDigit(e.KeyChar) && (Keys)e.KeyChar != Keys.Back) e.Handled = true;
        }

        private void txtUniNOk_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsDigit(e.KeyChar) && (Keys)e.KeyChar != Keys.Back) e.Handled = true;
        }

        #endregion

    }
}
